<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
	</body>
	<script type="text/javascript">
		//filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。 
		var arr =[1,2,3,4,5,6,7,8];
		var result = arr.filter(function(item,index){
			if(item > 7){
				return true;
			}
		})
		console.log(result);
		
		//参数1:callback
			/*为数组中每个元素执行的函数，该函数接收三个参数：
				currentValue(当前值):数组中正在处理的当前元素。
				index(索引):数组中正在处理的当前元素的索引。
				array:forEach()方法正在操作的数组。*/
		//参数2:thisArg
			/*可选参数。当执行回调 函数时用作this的值。*/
		
		//返回值：  一个新的通过测试的元素的集合的数组
		
		//是否影响老数组：不影响
		
		//Polyfill:衬垫代码
		if (!Array.prototype.filter){
		  Array.prototype.filter = function(fun /* , thisArg*/)
		  {
		    "use strict";
		
		    if (this === void 0 || this === null)
		      throw new TypeError();
		
		    var t = Object(this);
		    var len = t.length >>> 0;
		    if (typeof fun !== "function")
		      throw new TypeError();
		
		    var res = [];
		    var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
		    for (var i = 0; i < len; i++)
		    {
		      if (i in t)
		      {
		        var val = t[i];
		
		        // NOTE: Technically this should Object.defineProperty at
		        //       the next index, as push can be affected by
		        //       properties on Object.prototype and Array.prototype.
		        //       But that method's new, and collisions should be
		        //       rare, so use the more-compatible alternative.
		        if (fun.call(thisArg, val, i, t))
		          res.push(val);
		      }
		    }
		
		    return res;
		  };
		}
	</script>
</html>
